#!/usr/bin/env python3
"""
Git工作流一键安装脚本
自动设置企业级Git工作流环境
"""

import os
import sys
import subprocess
import argparse


def run_command(command, check=True):
    """执行shell命令"""
    try:
        result = subprocess.run(
            command,
            shell=True,
            check=check,
            capture_output=True,
            text=True
        )
        return result.stdout.strip(), result.stderr.strip(), result.returncode
    except subprocess.CalledProcessError as e:
        return e.stdout.strip(), e.stderr.strip(), e.returncode


def is_git_repo():
    """检查是否是Git仓库"""
    stdout, stderr, returncode = run_command("git rev-parse --git-dir")
    return returncode == 0


def setup_git_flow():
    """设置Git Flow"""
    print("🔧 设置Git Flow...")
    
    # 检查是否已安装git-flow
    stdout, stderr, returncode = run_command("git flow version")
    if returncode != 0:
        print("❌ Git Flow未安装，请先安装Git Flow工具")
        print("Windows: winget install gitflow-avh")
        print("macOS: brew install git-flow-avh")
        print("Linux: apt-get install git-flow")
        return False
    
    # 初始化git flow
    stdout, stderr, returncode = run_command("git flow init -d")
    if returncode == 0:
        print("✅ Git Flow初始化成功")
        return True
    else:
        print(f"❌ Git Flow初始化失败: {stderr}")
        return False


def setup_commit_hooks():
    """设置提交钩子"""
    print("🔧 设置提交钩子...")
    
    # 安装提交信息验证钩子
    success, message = run_command("python ../scripts/git_flow_helper.py install-hook")
    if success:
        print("✅ 提交钩子安装成功")
        return True
    else:
        print(f"❌ 提交钩子安装失败: {message}")
        return False


def setup_branches():
    """设置标准分支"""
    print("🔧 设置标准分支...")
    
    # 检查当前分支
    stdout, stderr, returncode = run_command("git branch --show-current")
    current_branch = stdout
    
    # 确保master分支存在
    stdout, stderr, returncode = run_command("git branch -a | grep master")
    if returncode != 0:
        print("创建master分支...")
        run_command("git checkout -b master")
    
    # 确保develop分支存在
    stdout, stderr, returncode = run_command("git branch -a | grep develop")
    if returncode != 0:
        print("创建develop分支...")
        run_command("git checkout -b develop")
    
    # 切换到develop分支
    run_command("git checkout develop")
    
    print("✅ 标准分支设置完成")
    return True


def setup_gitignore():
    """设置.gitignore文件"""
    print("🔧 设置.gitignore文件...")
    
    gitignore_content = """# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Virtual environments
venv/
env/
ENV/

# IDE
.vscode/
.idea/
*.swp
*.swo

# Logs
*.log

# OS
.DS_Store
Thumbs.db

# Project specific
data/
output/
temp/
"""
    
    try:
        with open(".gitignore", "w") as f:
            f.write(gitignore_content)
        print("✅ .gitignore文件创建成功")
        return True
    except Exception as e:
        print(f"❌ .gitignore文件创建失败: {e}")
        return False


def setup_readme():
    """设置README文件"""
    print("🔧 设置README文件...")
    
    if os.path.exists("README.md"):
        print("README.md已存在，跳过创建")
        return True
    
    readme_content = """# ArticleCrawler

一个功能强大的文章爬虫和自动发布工具。

## 功能特性

- 支持多种网站的文章爬取
- 自动下载并处理图片
- 支持多种发布方式（本地保存、API发布）
- 可配置的重试机制
- 详细的日志记录

## 快速开始

### 环境要求

- Python 3.7+
- 依赖包见requirements.txt

### 安装

```bash
# 克隆仓库
git clone <repository-url>
cd ArticleCrawler

# 安装依赖
pip install -r requirements.txt
```

### 使用

```bash
# 基本用法
python getContent.py --base-url <url> --pages <num> --selector <css>

# 查看帮助
python getContent.py --help
```

## 开发

本项目采用Git Flow工作流，详见[WORKFLOW.md](.github/WORKFLOW.md)。

## 许可证

MIT License
"""
    
    try:
        with open("README.md", "w") as f:
            f.write(readme_content)
        print("✅ README.md文件创建成功")
        return True
    except Exception as e:
        print(f"❌ README.md文件创建失败: {e}")
        return False


def setup_requirements():
    """设置requirements.txt文件"""
    print("🔧 设置requirements.txt文件...")
    
    if os.path.exists("requirements.txt"):
        print("requirements.txt已存在，跳过创建")
        return True
    
    requirements_content = """requests>=2.25.1
beautifulsoup4>=4.9.3
lxml>=4.6.3
pyyaml>=5.4.1
"""
    
    try:
        with open("requirements.txt", "w") as f:
            f.write(requirements_content)
        print("✅ requirements.txt文件创建成功")
        return True
    except Exception as e:
        print(f"❌ requirements.txt文件创建失败: {e}")
        return False


def main():
    parser = argparse.ArgumentParser(description='Git工作流一键安装脚本')
    parser.add_argument('--skip-gitflow', action='store_true', help='跳过Git Flow设置')
    parser.add_argument('--skip-hooks', action='store_true', help='跳过提交钩子设置')
    parser.add_argument('--skip-branches', action='store_true', help='跳过分支设置')
    parser.add_argument('--skip-gitignore', action='store_true', help='跳过.gitignore设置')
    parser.add_argument('--skip-readme', action='store_true', help='跳过README设置')
    parser.add_argument('--skip-requirements', action='store_true', help='跳过requirements.txt设置')
    
    args = parser.parse_args()
    
    print("🚀 开始设置企业级Git工作流环境...")
    
    # 检查是否是Git仓库
    if not is_git_repo():
        print("❌ 当前目录不是Git仓库，请先初始化Git仓库")
        print("运行: git init")
        sys.exit(1)
    
    success_count = 0
    total_steps = 6
    
    # 设置Git Flow
    if not args.skip_gitflow:
        if setup_git_flow():
            success_count += 1
    else:
        print("⏭️  跳过Git Flow设置")
        success_count += 1
    
    # 设置提交钩子
    if not args.skip_hooks:
        if setup_commit_hooks():
            success_count += 1
    else:
        print("⏭️  跳过提交钩子设置")
        success_count += 1
    
    # 设置分支
    if not args.skip_branches:
        if setup_branches():
            success_count += 1
    else:
        print("⏭️  跳过分支设置")
        success_count += 1
    
    # 设置.gitignore
    if not args.skip_gitignore:
        if setup_gitignore():
            success_count += 1
    else:
        print("⏭️  跳过.gitignore设置")
        success_count += 1
    
    # 设置README
    if not args.skip_readme:
        if setup_readme():
            success_count += 1
    else:
        print("⏭️  跳过README设置")
        success_count += 1
    
    # 设置requirements.txt
    if not args.skip_requirements:
        if setup_requirements():
            success_count += 1
    else:
        print("⏭️  跳过requirements.txt设置")
        success_count += 1
    
    # 总结
    print(f"\n🎉 设置完成! 成功: {success_count}/{total_steps}")
    
    if success_count == total_steps:
        print("\n✅ 所有设置完成，您可以开始使用企业级Git工作流了！")
        print("\n常用命令:")
        print("  python git_flow_helper.py start-feature <功能名>  # 开始新功能")
        print("  python git_flow_helper.py finish-feature <功能名> # 完成功能")
        print("  python git_flow_helper.py start-release <版本>   # 开始发布")
        print("  python git_flow_helper.py finish-release <版本>  # 完成发布")
        print("  python git_flow_helper.py start-hotfix <修复名>   # 开始热修复")
        print("  python git_flow_helper.py finish-hotfix <修复名>  # 完成热修复")
        print("  python git_flow_helper.py status                 # 查看状态")
    else:
        print("\n⚠️  部分设置失败，请检查错误信息并手动完成")


if __name__ == "__main__":
    main()